package com.java.config;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.CommandLineRunner;
import org.springframework.data.redis.core.RedisCallback;
import org.springframework.data.redis.core.StringRedisTemplate;
import org.springframework.stereotype.Component;

/**
 * springboot实现redis key过期监听
 * 在redis.conf里进行配置 notify-keyspace-events Ex
 * 1.@Component，spring的组件注解，会加入到bean容器
 * 2.CommandLineRunner，spring容器启动完后进行加载
 * 3.“@0“.getBytes()，监听redis0号库的所有发布消息（因为只有1一个地方用到，所以只有一个）
 * 4.过期的key-value,只能获取到key,value已经删除了
 */
@Component
public class RedisKeyWatch implements CommandLineRunner {
    @Autowired
    private StringRedisTemplate redisTemplate;

    @Override
    public void run(String... args) throws Exception {
        redisTemplate.execute((RedisCallback<Object>) redisConnection -> {
            redisConnection.pSubscribe((message, bytes) -> {
                System.out.println("过期key：" + message);
            }, "*@0*".getBytes());
            return null;
        });
    }
}